'''
无重复字符的最长子串：
原理，遍历整个字符串，将字符加入字符串集。如果有字符已经在字符串集中，则删除字符，并把left右移。
每次right移动后，计算最大子字符串。
'''

def length_of_longest_substring(s: str) -> int:
    char_set = set()
    left = 0
    max_length = 0

    for right in range(len(s)):
        while s[right] in char_set:
            char_set.remove(s[left])
            left += 1
        char_set.add(s[right])
        max_length = max(max_length, right - left + 1)

    return max_length

# 测试代码
s = "abcabcbb"
print(length_of_longest_substring(s))  # 输出应该是3，最长的无重复字符子串是"abc"
